package GestorCitas;

/**
 * @file Cita.java
 * @brief Implementa la clase Cita
 * 
 * Implementa la clase Cita usada para manejar la información de
 * las citas del sistema.
 * 
 * @author Víctor Martínez Gómez, revisado por Antonio M. Gutierrez Martinez
 * @version 01.01
 * 
 */

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.sql.SQLException;
import java.util.Date;

import GestorUsuarios.IDException;

/**
 * @class Cita
 * 
 * @brief Se encarga de realizar las operaciones para manejar la información de
 * 		  las citas del sistema.
 * 
 *        Se encarga de realizar las operaciones para manejar la información de
 *		  las citas del sistema. Permite crearlas y obtener sus
 *		  datos.
 * 
 */

public class Cita {

	/**
	 * @brief Id de la cita
	 */
	private int _idCita;
	/**
	 * @brief Fecha en la que comienza la cita
	 */
	private Date _fechaCita;
	/**
	 * @brief Estado actual de la cita
	 */
	private EstadoCita _estado;

        /**
         * @brief Observaciones de la cita
         */
        private String _observaciones;
	/**
	 * @brief Fecha en la que finaliza la cita
	 */
	private Date _fechaFinalizacion;
	/**
	 * @brief Id del paciente que pidió la cita
	 */
	private int _idPaciente;
	/**
	 * @brief Id del médico asociado a la cita
	 */
	private int _idMedico;
	/**
	 * @brief Id del centro en que tendrá lugar la cita
	 */
	private int _idCentro;
	
	/**
	 * @brief Añade una cita a la base de datos y le asigna un Id
	 * @param cita La cita que se quiere añadir
	 * @throws SQLException, IOException, ClassNotFoundException, IDException
	 */
	public static void add(Cita cita) throws SQLException, IOException, ClassNotFoundException, IDException {
		CitaDAO.add(cita);
	}
	
	/**
	 * @brief Obtiene una cita de la base de datos por su Id
	 * @param id Id por el que buscar la cita
	 * @return El objeto cita encontrado o null si no lo encuentra
	 * @throws SQLException, IOException, ClassNotFoundException
	 */
	public static Cita get(int id) throws SQLException, IOException, ClassNotFoundException {
		return CitaDAO.get(id);
	}
	
	/**
	 * @brief Obtiene una cita de la base de datos por distintos parametros
	 * @param idPaciente Id del paciente asociado
	 * @param idMedico Id del medico asociado
	 * @param idCentroMedico Id del centro asociado
	 * @param fechaInicio Fecha a partir de la cual buscar el comienzo de las citas
	 * @param fechaFin Fecha hasta la cual buscar el fin de las citas
	 * @param estado Estado en el que se encuentra la cita
	 * @return Un vector de citas o null si no encuentra ninguna
	 * @throws SQLException, IOException, ClassNotFoundException
	 */
	public static Cita[] get(Integer idPaciente, Integer idMedico, Integer idCentroMedico, Date fechaInicio, Date fechaFin, EstadoCita estado) throws SQLException, IOException, ClassNotFoundException {
		return CitaDAO.get(fechaInicio, fechaFin, estado, idPaciente, idMedico, idCentroMedico);
	}
	
	/**
	 * @brief Actualiza la información asociada al objeto Cita
	 * @param cita Cita a actualizar
	 * @throws ClassNotFoundException, IOException, SQLException
	 */
	public static void update(Cita cita) throws SQLException, IOException, ClassNotFoundException {
		CitaDAO.update(cita);
	}
	
	
	/**
	 * @brief Constructor de cita
	 */
	public Cita(int idCita, Date fechaCita, Date fechaFinalizacion, EstadoCita estado, String observaciones, int idPaciente, int idMedico, int idCentro) {
		_idCita = idCita;
		_fechaCita = fechaCita;
		_fechaFinalizacion = fechaFinalizacion;
		_estado = estado;
                _observaciones = observaciones;
		_idPaciente = idPaciente;
		_idMedico = idMedico;
		_idCentro = idCentro;
	}
	
	/**
	 * @brief Constructor de cita
	 */
	public Cita(Date fechaCita, Date fechaFinalizacion, EstadoCita estado, String observaciones, int idPaciente, int idMedico, int idCentro) {
		_fechaCita = fechaCita;
		_fechaFinalizacion = fechaFinalizacion;
		_estado = estado;
                _observaciones = observaciones;
		_idPaciente = idPaciente;
		_idMedico = idMedico;
		_idCentro = idCentro;
	}
	
	/**
	 * @brief Obtiene el id de la cita
	 */
	public int getIdCita() {
		return _idCita;
	}
	
	/**
	 * @brief Establece el id de la cita
	 * @param id id de la cita
	 */
	public void setIdCita(int idCita) {
		_idCita = idCita;
	}
	
	/**
	 * @brief Obtiene el id del paciente
	 */
	public int getIdPaciente() {
		return _idPaciente;
	}
	
	/**
	 * @brief Establece el id del paciente
	 * @param idPaciente id del paciente
	 */
	public void setIdPaciente(int idPaciente) {
		_idPaciente = idPaciente;
	}
	
	/**
	 * @brief Obtiene el id del medico
	 */
	public int getIdMedico() {
		return _idMedico;
	}
	
	/**
	 * @brief Establece el id del medico
	 * @param idMedico id del medico
	 */
	public void setIdMedico(int idMedico) {
		_idMedico = idMedico;
	}
	
	/**
	 * @brief Obtiene el id del centro
	 */
	public int getIdCentro() {
		return _idCentro;
	}
	
	/**
	 * @brief Establece el id del centro
	 * @param idCentro id del centro
	 */
	public void setIdCentro(int idCentro) {
		_idCentro = idCentro;
	}
	
	/**
	 * @brief Obtiene la fecha de la cita
	 */
	public Date getFechaCita() {
		return _fechaCita;
	}
	
	/**
	 * @brief Establece la fecha de la cita
	 * @param fecha nueva fecha
	 */
	public void setFechaCita(Date fecha) {
		_fechaCita = fecha;
	}
	
	/**
	 * @brief Obtiene la fecha de finalizacion de la cita
	 */
	public Date getFechaFinalizacion() {
		return _fechaFinalizacion;
	}
	
	/**
	 * @brief Establece la fecha de finalizacion de la cita
	 * @param fecha nueva fecha
	 */
	public void setFechaFinalizacion(Date fecha) {
		_fechaFinalizacion = fecha;
	}
	
	/**
	 * @brief Obtiene el estado de la cita
	 */
	public EstadoCita getEstado() {
		return _estado;
	}
	
	/**
	 * @brief Establece el estado de la cita
	 * @param estado el nuevo estado
	 */
	public void setEstado(EstadoCita estado) {
		_estado = estado;
	}

        /**
         * Obtiene las observaciones de la cita
         * @return
         */
        public String getObservaciones () {
            return _observaciones;
        }

        /**
         * Establece las observaciones de la cita
         * @param observaciones
         */
        public void setObservaciones (String observaciones) {
            _observaciones = observaciones;
        }
}
